const Koa = require('koa')
const app = new Koa()
// const json = require('koa-json')
const bodyparser = require('koa-bodyparser')
// 使用路由插件帮助我们快速开发路由接口
const router = require('koa-router')()

// app.use(json())
app.use(
	bodyparser({
		// 帮助我解析 请求体中传过来的 json / form / text格式参数
		enableTypes: ['json', 'form', 'text']
	})
)

const db = [
	{
		id: 1,
		city: '北京'
	},
	{
		city: '香港',
		id: 2
	},
	{
		city: '香港',
		id: 3
	},
	{
		city: '香港',
		id: 4
	},
	{
		city: '香港',
		id: 5
	},
	{
		city: '香港',
		id: 6
	},
	{
		city: '香港',
		id: 7
	},
	{
		city: '香港',
		id: 8
	},
	{
		city: '香港',
		id: 9
	},
	{
		city: '香港',
		id: 10
	},
	{
		city: '香港',
		id: 11
	},
	{
		city: '香港',
		id: 12
	},
	{
		city: '香港',
		id: 13
	}
]
// 分页接口
router.get('/api/page', async (ctx, next) => {
	const { page, size } = ctx.query
	ctx.body = {
		code: 0,
		message: 'success',
		// data: db.slice((page - 1) * size, page * size)
		data: db.filter((v, i) => i >= (page - 1) * size && i < page * size)
	}
})

router.post('/api/login', async (ctx, next) => {
	ctx.body = '我是查询接口'
})
router.post('/api/register', async (ctx, next) => {
	ctx.body = '我是查询接口'
})

router.get('/api/users', async (ctx, next) => {
	ctx.body = {
		code: 0,
		message: 'success',
		data: db
	}
})

// 添加接口
router.post('/api/users', async (ctx, next) => {
	const data = db[db.length - 1]
	const content = ctx.request.body
	db.push({ ...content, id: data.id + 1 })
	ctx.body = {
		code: 0,
		message: 'success',
		data: db
	}
})
// 修改
router.put('/api/users/:id', async (ctx, next) => {
	const { id } = ctx.params
	// ctx.request.body 接收 请求体参数 （不是url拼接过来的）
	const content = ctx.request.body
	ctx.body = {
		code: 0,
		content,
		message: 'success',
		data: db.filter((v) => {
			if (v.id == id) {
				// 引用类型 {} = {}
				console.log(content, 'v')
				v.city = content.city
				// v.city = content.city
				return v
			}
		})
	}
})

// 删除接口
router.delete('/api/users/:id', async (ctx, next) => {
	const { id } = ctx.params
	db.splice(
		db.findIndex((v) => v.id == id),
		1
	)
	ctx.body = {
		code: 0,
		message: 'success',
		data: db
	}
})

const asyncTime = async (ctx, next) => {
	const start = new Date()
	await next()
	const ms = new Date() - start
	console.log(`${ctx.method} ${ctx.url} - ${ms}ms`)
}

app.use(asyncTime)

app.use(router.routes(), router.allowedMethods())

/**
 * 登陆  post  /api/login
 * 注册  post  /api/register
 *
 * 增  post     /api/users
 * 删  delete   /api/users/:id
 * 改  put      /api/users/:id
 * 查  get      /api/users
 *
 * 一个url, 多种请求方式 ， Restful Api
 *
 */

app.listen('3001', () => {
	console.log('http://localhost:3001')
})
